﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FrbaCommerce.Abm_Cliente;
using FrbaCommerce.Abm_Visibilidad;
using FrbaCommerce.Abm_Empresa;
using FrbaCommerce.Abm_Rol;
using FrbaCommerce.Abm_Rubro;
using FrbaCommerce.Calificar_Vendedor;
using FrbaCommerce.Comprar_Ofertar;
using FrbaCommerce.Editar_Publicacion;
using FrbaCommerce.Facturar_Publicaciones;
using FrbaCommerce.Generar_Publicacion;
using FrbaCommerce.Gestion_de_Preguntas;
using FrbaCommerce.Historial_Cliente;
using FrbaCommerce.Listado_Estadistico;
using FrbaCommerce.Login;
using FrbaCommerce.Registro_de_Usuario;
using FrbaCommerce.Modificar_contraseña;
using FrbaCommerce.Baja_Usuario;


namespace FrbaCommerce
{
    public partial class FormMainMenu : Form
    {
        private Usuario user;
        private DataTable funcionalidades;
        private Rol rolActivo;

        public FormMainMenu() 
        {
            InitializeComponent();
        }

        public FormMainMenu(Usuario user)
        {
            InitializeComponent();
            this.user = user;
            this.rolActivo = new Rol(user.id_rol);
            habilitarFuncionalidades();
        }

        public FormMainMenu(Usuario user, Rol rol)
        {
            InitializeComponent();
            this.user = user;
            this.rolActivo = rol;
            habilitarFuncionalidades();
        }

        private void FormMainMenu_Load(object sender, EventArgs e)
        {
            
        }

        private void comprarOfertarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ComprarOfertar comprarOfertar = new ComprarOfertar(this.user);
            comprarOfertar.ShowDialog();
        }


        private void altaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Cliente cliente = new Cliente();
            AbmCliente altaCliente = new AbmCliente(cliente);
            altaCliente.ShowDialog();
        }

        private void altaToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            Visibilidad nuevaVisibilidad = new Visibilidad();
            Abm_Visibilidad.AbmVisibilidad altaVisibilidad = new AbmVisibilidad(nuevaVisibilidad);
            altaVisibilidad.ShowDialog();

        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro que desea salir de la aplicación?", "FrbaCommerce", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                this.Close();
                Application.Exit();
            }
        }

        private void gestionDePreguntasToolStripMenuItem_Click (object sender, EventArgs e)
        {
            GestionDePreguntas nuevaResponder = new GestionDePreguntas(this);
            nuevaResponder.StartPosition = FormStartPosition.CenterParent;
            nuevaResponder.ShowDialog();
        }

        private void actualizaciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Visibilidad modif_visibilidad = new Visibilidad();
            Abm_Visibilidad.ListadoVisibilidad actualizar = new ListadoVisibilidad(true, modif_visibilidad);
            actualizar.ShowDialog();
        }

        private void bajaToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            Visibilidad modif_visibilidad = new Visibilidad();
            Abm_Visibilidad.ListadoVisibilidad actualizar = new ListadoVisibilidad(false, modif_visibilidad);
            actualizar.ShowDialog();
        }

        private void generarPublicacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.user.id_rol == 3)
            {
                SeleccionarUsuario seleccion = new SeleccionarUsuario();
                seleccion.ShowDialog();
                if (seleccion.usuario != null)
                {
                    Generar_Publicacion.GenerarPublicacion generarPublic = new GenerarPublicacion(seleccion.usuario, new Publicacion(), false);
                    generarPublic.ShowDialog();
                }
            }
            else
            {
                Generar_Publicacion.GenerarPublicacion generarPublic = new GenerarPublicacion(this.user, new Publicacion(), false);
                generarPublic.ShowDialog();
            }           
            
        }

        private void modificacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListadoCliente listado = new ListadoCliente(true, this.user);
            listado.ShowDialog();

        }

        private void modificacionContraseniaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ModificarContrasenia cambiarPass = new ModificarContrasenia(this.user, this.Text);
            cambiarPass.ShowDialog();
        }

        public void habilitarFuncionalidades() 
        { 
            //Tabla Funcionalidades: funcionalidad, idRol, rol
            getFuncionalidades();

            if ( funcionalidadHasValue(2)
                && funcionalidadHasValue(3)
                && funcionalidadHasValue(4)
                && funcionalidadHasValue(5)
                && funcionalidadHasValue(6)
                && funcionalidadHasValue(7)) 
            {
                this.aBMsToolStripMenuItem.Enabled = true;
            }

            if ( funcionalidadHasValue(8)
                && funcionalidadHasValue(9)
                && funcionalidadHasValue(10)
                && funcionalidadHasValue(14) )
            {
                this.publicacionesToolStripMenuItem.Enabled = true;
            }
            
            if ( funcionalidadHasValue(11) ) 
            {
                this.gestionarOperacionToolStripMenuItem.Enabled = true;
            }

            if ( funcionalidadHasValue(12) ) 
            {
                this.historialToolStripMenuItem.Enabled = true;
            }

            if ( funcionalidadHasValue(13) ) 
            {
                this.calificarVendedorToolStripMenuItem.Enabled = true;
            }

            if ( funcionalidadHasValue(15) ) 
            {
                this.listadosEstadisticosToolStripMenuItem.Enabled = true;
            }

            //USUARIO se muestra siempre
        }

        private void getFuncionalidades() 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data;
            String query = "SELECT  fr.funcionalidad as idFuncionalidad, f.descripcion as funcionalidad, fr.rol as idRol  FROM ";
                query += " (ASDF.Funcion_rol fr LEFT JOIN ASDF.Funcionalidad f on fr.funcionalidad= f.id) ";
                query += " LEFT JOIN ASDF.Rol r on fr.rol = r.id ";
                query += " WHERE r.habilitado = 1 and r.id = '" + this.rolActivo.id + "';";

            try 
            {
                data = conexion.ejecutarConsulta(query);
                this.funcionalidades = data.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }
        }

        private Boolean funcionalidadHasValue (int id) 
        {
            int funcId;
            for (int i=0; this.funcionalidades.Rows.Count > i ; i++) 
            {
                funcId = Convert.ToInt32(this.funcionalidades.Rows[i].ItemArray[0].ToString());
                if ( funcId == id) 
                {
                    return true;
                }
            }

            return false;
        }

        public Usuario getUsuarioLogueado () 
        {
            return this.user;
        }

        private void bajaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListadoCliente listado = new ListadoCliente(false,this.user);
            listado.ShowDialog();
        }

        private void altaToolStripMenuItem3_Click(object sender, EventArgs e)
        {
            Rol rol = new Rol();
            rol.Funcionalidades = new List<Funcionalidad>();
            AbmRol AltaRol = new AbmRol(rol, false);
            AltaRol.ShowDialog();
        }

        private void modificacionToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ListadoRoles lista = new ListadoRoles(true);
            lista.ShowDialog();
        }

        private void bajaToolStripMenuItem3_Click(object sender, EventArgs e)
        {
            ListadoRoles lista = new ListadoRoles(false);
            lista.ShowDialog();
        }

        private void calificarVendedorToolStripMenuItem_Click (object sender, EventArgs e)
        {
            CalificarVendedor calificar = new CalificarVendedor(this.user);
            if (!calificar.cargarDatos()) 
            {
                MessageBox.Show("No hay vendedores a calificar");
                return;
            }
            calificar.ShowDialog();
        }

        private void altaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            AbmEmpresa alta = new AbmEmpresa(new Empresa());
            alta.ShowDialog();
        }

        private void modificaciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListadoEmpresa listado = new ListadoEmpresa(true);
            listado.ShowDialog();
        }

        private void bajaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ListadoEmpresa listado = new ListadoEmpresa(false);
            listado.ShowDialog();
        }

        private void verHistorialToolStripMenuItem_Click(object sender, EventArgs e) 
        {
            HistorialCliente historial = new HistorialCliente(this.user);
            historial.ShowDialog();
        }

        private void verTop5ToolStripMenuItem_Click(object sender, EventArgs e) 
        {
            ListadoEstadistico estadistico = new ListadoEstadistico();
            estadistico.ShowDialog();
        }

        private void editarPublicacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.user.id_rol == 3)
            {
                SeleccionarUsuario seleccion = new SeleccionarUsuario();
                seleccion.ShowDialog();
                if (seleccion.usuario != null)
                {
                    EditarPublicacion editar = new EditarPublicacion(seleccion.usuario);
                    editar.ShowDialog();
                }
            }
            else
            {
                EditarPublicacion editar = new EditarPublicacion(this.user);
                editar.ShowDialog();
            }            
        }

        private void facturarPublicacionesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.user.id_rol == 3)
            {
                SeleccionarUsuario seleccion = new SeleccionarUsuario();
                seleccion.ShowDialog();
                if (seleccion.usuario != null)
                {
                    FacturarPublicacion facturacion = new FacturarPublicacion(seleccion.usuario);
                    facturacion.ShowDialog();
                }
            }
            else
            {
                FacturarPublicacion facturacion = new FacturarPublicacion(this.user);
                facturacion.ShowDialog();
            }            
        }

        //Deshabilita el menu, excepto USUARIO
        public void inhabilitarMenu()
        {
            this.aBMsToolStripMenuItem.Enabled = false;
            this.calificarVendedorToolStripMenuItem.Enabled = false;
            this.gestionarOperacionToolStripMenuItem.Enabled = false;
            this.publicacionesToolStripMenuItem.Enabled = false;
            this.historialToolStripMenuItem.Enabled = false;
            this.listadosEstadisticosToolStripMenuItem.Enabled = false;
        }

        private void eliminarToolStripMenuItem_Click(object sender, EventArgs e) 
        {
            SeleccionarUsuario seleccion = new SeleccionarUsuario();
            seleccion.ShowDialog();
            if (seleccion.usuario != null)
            {
               EliminarUsuario eliminar = new EliminarUsuario(seleccion.usuario);
               eliminar.ShowDialog();
            }
           
        }

        
    }
}
